require 'swagger/blocks'

module ExploitApiDoc
  include Swagger::Blocks

  swagger_schema :Exploit do
    key :required, [:id, :name]
    property :id, type: :integer, format: :int32
    property :created_at, type: :string, format: :date_time
    property :updated_at, type: :string, format: :date_time
    property :workspace_id, type: :integer, format: :int32
    property :name, type: :string
    property :critical, type: :boolean
    property :seen, type: :string
    property :username, type: :string
    property :info do
      key :type, :object
      property :revision, type: :string
    end
  end

  swagger_path '/api/v1/exploits' do
    # Swagger documentation for /api/v1/exploits POST
    operation :post do
      key :description, 'Create an exploit entry.'
      key :tags, [ 'exploit' ]

      parameter do
        key :in, :body
        key :name, :body
        key :description, 'The attributes to assign to the exploit.'
        key :required, true
        schema do
          property :timestamp, type: :string, format: :date_time
          property :module, type: :string
          property :workspace, required: true, type: :string
          property :port, type: :integer, format: :int32
          property :proto, type: :string, enum: ['tcp','udp']
          property :service, '$ref' => :Service
          property :host, '$ref' => :Host
          property :vuln, '$ref' => :Vuln

          property :refs do
            key :required, true
            key :type, :array
            items do
              key :type, :string
            end
          end

          property :exploit_report_attempt do
            key :type, :string
            key :enum, ['attempt', 'failure', 'success']
          end
        end
      end

      response 200 do
        key :description, 'Successful operation.'
        schema do
          key :type, :object
          key :'$ref', :Exploit
        end
      end
    end
  end
end
